The Problem
One of the major challenges with the AS7 plugin are differences between subsystems for Standalone, Managed Server, and Profile servers. I will use the transactions subsystem as an example but this applies to almost all subsystems. The transactions subsystem has different metrics, properties, operations, and children depending on the location on the server tree. For example, the metrics are only available on Standalone and Managed Server but not on the Profile. Another example is around difference between sub-subsystem (children of the main subsystem). I attached the sub-tree structure for the transaction subsystem based on the relative location. Also, the AS7 plugin descriptor has sample approach implementing basic support for this subsystem by creating three services based on the subsystem location.
The biggest challenge is that the attributes are disjoint and there is no way to inherit and extend one single resource type. Maybe multiple inheritance style would make this work but even then I am not very sure. By multiple inheritance I mean Standalone subsystem configuration inherits from Profile and Managed Server subsystem configurations at the same time. In general Standalone is the super set (the union of Profile and Managed), while Profile and Managed Server have nothing in common.
Solution
The solution has two parts (not implemented today):
1) Introduce the concept of Abstract service/server. This type of resource would never be imported in the database or the agent tree. The sole purpose is to help with the inheritance. The idea to construct subsystems by inheriting from other subsystems and extending the functionality.
2) Allow multiple inheritance of resources. For example service A inherits at the same time from service B and service C. Service A would just be the aggregate of both inherited services (order of inheritance to be decided).
Samples
Here are some possibilities for defining abstract resources and multiple inheritance in the descriptor.
Abstract Resource
1) <server name="Sample Abstract Server" abstract="true" ...>...</server>
2) <abstract name="Sample Abstract Resource" ...>...</abstract>
Multiple Inheritance
1)
2)